A late lap from Leclerc saw the Ferrari driver rise to second behind Verstappen, though the Dutchman will take a 10-place grid penalty for Sunday’s race.
That leaves Leclerc on pole, with Sergio Perez an important second on the grid in the second Red Bull Racing.
Oscar Piastri was sixth fastest, leaving him fifth on the grid, while Daniel Ricciardo was eliminated at the end of Qualifying 2 and will start 13th.
Wet conditions to start the qualifying and the prospect of more rain as it wore on prompted a busy start.
McLaren predicted it could arrive as soon as five minutes into the session, warning Lando Norris that he may have time for just a single timed lap.
The Miami Grand Prix winner banked a 1:58.894s, faster than was seen in Free Practice 3 suggesting conditions weren’t as bad as they’d been earlier in the day.
It didn’t stand for long as Piastri went faster, logging a 1:57.411s before Verstappen improved to 1:56.003s – a time two seconds faster than Perez had managed in the other Red Bull Racing.
With 10 minutes to go, rain was reported at Les Combes, the complex at the end of the Kemmel Straight.
As it did, Ricciardo (16th), Yuki Tsunoda (17th), Logan Sargeant (18th), Zhou Guanyu (19th), and Lance Stroll (20th) were all in the knockout zone.
RB had its drivers on a lap at the time, the pair on personal bests as they rose to second (Ricciardo) and fifth (Tsunoda).
Conditions quickly began to improve and the spray that had been prevalent just minutes earlier was less visible around large parts of the lap.
Most pitted for a second set of intermediate tyres to capitalise on the improving track conditions with around six minutes remaining.
A late lap from George Russell saw the Mercedes driver escape the bottom five as the chequered flag waved, though not so fortunate were Nico Hulkenberg, Kevin Magnussen, Tsunoda, Sargeant, and Zhou.
Piastri ended the segment fastest with Verstappen third, having used a single set of intermediate tyres, Perez fourth, and Ricciardo ninth. Norris also escaped in 12th.
At the start of Qualifying 2, a dry line was beginning to emerge though Red Bull Racing reporting a fine drizzle.
The initial pace was faster than what had been set in Qualifying 1, Verstappen setting a 1:53.857s, suggesting conditions were edging towards the crossover onto slick tyres.
After the initial runs in the segment, Russell was among those in the bottom five, along with Leclerc.
Perez reported an increase in rain just as Russell began a second flying lap, the Brit mustering a 1:54.733s that moved him up to fourth.
The timing of the runs were designed to give drivers a chance to record two timed laps, separated by a build lap.
With two minutes remaining, Perez found himself in the bottom five, together with Fernando Alonso, Pierre Gasly, Valtteri Bottas, and Stroll.
Perez improved to fourth, but others were also on track improving as the chequered flag waved.
Not among them was Ricciardo, who’d pitted his RB as he set on the bubble in 10th.
He was ultimately bumped to 13th as he fell by the wayside, eliminated alongside Alex Albon, Gasly, Bottas, and Stroll.
Verstappen topped the segment while Perez narrowly escaped Qualifying 3 after dropping to 10th, 0.003s faster than Albon.
Hamilton headed the queue as Qualifying 3 began, the weather having largely stabilised – intermediates unquestionably the correct tyre.
The Mercedes driver set the benchmark at 1:54.011s, two-tenths faster than his team-mate could manage.
It was faster even than Piastri, who was 0.016s slower than the seven-time world champion.
Last of the 10 runners to record a Qualifying 3 time, Verstappen topped the session with a 1:53.159s, bumping Perez (who’d run a set of used tyres) to second by six-tenths.
A second lap on the same set of tyres saw Hamilton improve to a 1:53.835s, enough for third as Norris slotted into fourth, just over a tenth slower than the Mercedes.
With three minutes remaining, their sessions were effectively done given the lack of time to get back to the pits for another run.
Verstappen and Perez did head out for a final push, as did Ferrari who had its drivers seventh (Carlos Sainz) and eighth (Leclerc).
Sainz was unable to improve on his earlier effort, while Leclerc climbed to a surprise second behind Verstappen.
The Monegasque was the only driver to improve, handing him an effective pole given Verstappen – who was fastest – will take a 10-place grid penalty.
Perez hung on to third from Hamilton, with Norris the first of the McLaren drivers just fifth fatest.
The balance of the top 10 was completed by Piastri, Russell in seventh from Sainz, Alonso, and Ocon.
Officially, the result is Leclerc’s third pole position in Belgium, and the 25th of his F1 career, moving him clear of Niki Lauda and Nelson Piquet, and one shy of Mika Hakkinen.